home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / univspl / big_time.c < prev    next >
C/C++ Source or Header  |  1999-01-27  |  24KB  |  638 lines

  1. #define    VXWORKS    0        /* 1 for VxWorks, 0 for MacOS                            */
  2. #define    MCOS     0        /* 1 for Mercury MCOS, 0 for MacOS                       */
  3. #define  TWIN 1        /* 1 for MacOS, 0 for Windows */
  4. #define    BIG    0            /* 1 for rotating timing buffers, 0 for static addresses */
  5. #define    STATIC    0        /* 1 for static memory allocation, 0 for run-time malloc */
  6. #define NMAX    16384    /* Largest test vector size allowed                      */
  7. #if BIG
  8. #define    STATIC    0        /* BIG => force dynamic memory allocation    */
  9. #endif
  10. #if ((VXWORKS)&&(MCOS))
  11. #define    MCOS    0        /* can't have it both ways                    */
  12. #endif
  13.  
  14. /* USPL Big Wrapper Timer                                                   */
  15. /*                                                                          */
  16. /* Usage:   big_timer [npts]                                                */
  17. /*                                                                          */
  18. /* HISTORY:                                                                 */
  19. /* When         Who                 What                                    */
  20. /* Mar 31 1998    Bill Fincke         Created for Mercury SAL under MCOS      */
  21. /* Nov 19 1998  Bill Fincke         Ported to MacOS, VxWorks for USPL       */
  22. /*                                                                          */
  23.  
  24. #include <stdio.h>
  25. #include <stdlib.h>
  26. #include <string.h>
  27. #if VXWORKS
  28. #include <ticLib.h>
  29. #include <sysLib.h>
  30. #else
  31. #include <time.h>
  32. #endif
  33. #include "uspl.h"
  34.  
  35. /* below line added 12/10/98 RDK */
  36. void timer(char *name, float ptime2, float ptime3, void (*funct)(), long npt);
  37.  
  38.     double align;
  39. #if STATIC
  40.     float b1[NMAX],b2[NMAX],b3[NMAX];
  41.     float cwts[NMAX*2];
  42.     long ib[8192];
  43. #else
  44.     unsigned long alignment;
  45.     float *b1, *b2, *b3;
  46.     float *cwts;
  47.     long *ib;
  48. #if BIG
  49.     float *S[32],*D[32];
  50. #endif
  51. #endif
  52.     float *cs1, *cs2, *cso;
  53.     float rs1, rs2, rs3, rs4, rso;
  54.     double *dv1, *dvo;
  55.     float *rv, *rv1, *rv2, *rv3, *rv4, *rvo, *rvio, *rvt;
  56.     float *cv1, *cv2, *cv3, *cvo, *cvio, *cvt;
  57.     long *iv1, *iv2, *ivo;
  58.     short int *sv1, *svo;
  59.     char *bv1, *bvo;
  60.     long inc=1, inc1=1, inc2=1, inc3=1, inc4=1, inco=1, incio=1;
  61.     long flg=1, flg1=1, flg2=1;
  62.     long no = 1024, ndf = 1;
  63.     float z=0, a=1.0, b=2.0, c=3, d=1, rm1=-1, rp1=1;
  64.     long i1=1,i2=2, idx;
  65. int n1=1, n2=2, n8=8, n16=16, n32=32, n64=64, n128=128, n256=256, n512=512;
  66. int n1k=1024, n2k=2048, n4k=4096, n8k=8192, n16k=16384;
  67. int n100=100, n300=300;
  68. int npts=1024;
  69.  
  70. /*-- define macros to initialize inputs ---*/
  71. #if BIG
  72. #define INIT_INPUTS(X)                        \
  73. for(j=0;j<8;j++)                            \
  74.    for(i=0; i<NMAX; i++)S[j][i] = (X);
  75. #else
  76. #define INIT_INPUTS(X)                        \
  77. for(i=0; i<NMAX; i++)b1[i]=(X);
  78. #endif
  79.  
  80. #if BIG
  81. #define INIT_DOUBLE(X)                        \
  82. for(j=0;j<8;j++)                            \
  83.    {                                        \
  84.     dv1=(double*)S[j];                        \
  85.     for(i=0; i<npts; i++)dv1[i] = (X);        \
  86.     }
  87. #else
  88. #define INIT_DOUBLE(X)                        \
  89. for(i=0; i<npts; i++)dv1[i]=(X);
  90. #endif
  91. /* changed to void_big_timre_funcs.h 12/10/98 RDK */
  92. #include "void_big_timer_funcs.h"
  93.  
  94. main (argc, argv)
  95. int argc;
  96. char *argv[];
  97. {
  98.         static char sccsid[] = "@(#)timer.c    1.60\t7/21/93 USPL";
  99. long i,j;
  100.  
  101. #if ((!VXWORKS)&&(!MCOS) && (!TWIN))
  102. /* get command line arguments from CodeWarrior */
  103.     argc = ccommand(&argv);
  104. #endif
  105.  
  106. /*    Get argument (test vector size) if any    */
  107.  
  108. if (argc>1)
  109.     {
  110.     i = strtol(argv[1],0,0);
  111.     if ((i>16) && (i<=NMAX)) npts = i;
  112.     }
  113. else
  114.     npts = n1k;        /* default is 1k    */
  115.  
  116. #if !STATIC
  117. i = NMAX*2;                /* nominal size of b1    */
  118. j = 512*512;            /* room required for mxmov(512x512)    */
  119. i = (i < j) ? j : i;    /* make sure we have enough room for mxmov! */
  120. printf("malloc %d floats for b1\n",i);
  121. b1 = (float *)malloc(i*sizeof(float));
  122. b2 = (float *)malloc(NMAX*2*sizeof(float));
  123. b3 = (float *)malloc(NMAX*2*sizeof(float));
  124. cwts = (float *)malloc(NMAX*2*sizeof(float));
  125. ib = (long *)malloc(8192*sizeof(long));
  126. printf ("Address of b1=%X b2=%X b3=%X cwts=%X ib=%X\n",b1,b2,b3,cwts,ib);
  127. if ((long)b1%4!=0 || (long)b2%4!=0 || (long)b3%4!=0 || (long)cwts%4!=0 || (long)ib%4!=0)
  128. {
  129.    printf("Adress not 4 byte aligned. Exiting.\n");
  130.    exit(-1);
  131. }
  132.    
  133. if ((b1==(float *)0) || (b2==(float *)0) || (b3==(float *)0) ||
  134.     (cwts==(float *)0) || (ib==(long *)0) )
  135.    { printf("can't allocate buffer space - increase heap at runtime!\n"); exit(0);}
  136. #if BIG
  137. printf("\nrunning BIG version\n");
  138. i = 32*(NMAX/2);        /* nominal size of S[i]    */
  139. j = 512*512;            /* room required for mxmov(512x512)    */
  140. if (i<j)                /* make sure we have enough room for mxmov! */
  141.    { printf("NMAX = %d not big enough for 512x512 mxmov!\n",NMAX); exit(0);}
  142. S[0] = S[8] = S[16] = S[24] = (float *)malloc(32*(NMAX/2)*sizeof(float));
  143. if ((S[0]==(float *)0) )
  144.         { printf("can't allocate big S buffer space - increase heap at runtime!\n"); exit(0);}
  145. for (i=1; i<8; i++)
  146.     {
  147.     S[i] = S[i-1] + NMAX*2;
  148.     S[i+8] = S[i+16] = S[i+24] = S[i] ;
  149. /* printf("S[%d],S[%d],S[%d],S[%d] = 0x%08x\n",i,i+8,i+16,i+24,S[i]); */
  150.     }
  151. D[0] = D[8] = D[16] = D[24] = (float *)malloc(32*(NMAX/2)*sizeof(float));
  152. if ((D[0]==(float *)0) )
  153.         { printf("can't allocate big D buffer space - increase heap at runtime!\n"); exit(0);}
  154. for (i=1; i<8; i++)
  155.     {
  156.     D[i] = D[i-1] + NMAX*2;
  157.     D[i+8] = D[i+16] = D[i+24] = D[i] ;
  158. /* printf("D[%d],D[%d],D[%d],D[%d] = 0x%08x\n",i,i+8,i+16,i+24,D[i]); */
  159.     }
  160. #else
  161. printf("\nrunning SMALL version\n");
  162. #endif
  163. #endif
  164.  
  165. rv1 = rv2 = rv3 = rv4 = rvio = b1;
  166. rvo = b2;
  167. rvt = b3;
  168. cv1 = cv2 = cv3 = cvio = b1;
  169. cvo = b2;
  170. cvt = b3;
  171. cs1 = cs2 = b1;
  172. cso = b2;
  173. iv1 = iv2 = (long*)b1;
  174. ivo = (long*)b2;
  175. sv1 = (short int *)b1;
  176. svo = (short int *)b2;
  177. bv1 = bvo = (char*)b1;
  178. bvo = (char*)b2;
  179. dv1 = (double*)b1;
  180. dvo = (double*)b2;
  181. printf("\n\n");
  182. printf("           CSPI     CSPI     Sigma    Sigma   Sigma    Sigma     Sigma\n");
  183. printf("           SC 2     SC 3     \n");
  184. printf("           Pub.     Pub.     Meas.    Ovhd.    Time   vs SC 2   vs SC 3\n");
  185. printf("Funct     (ms/1K)  (ms/1K)  (ms/1K) (us/call) (ns/pt)  (%%)       (%%)\n"); 
  186. a = 1.0;
  187. printf("\n \n  USPL routines (%d-pt vectors): \n",npts);
  188.  
  189.  
  190. INIT_INPUTS (.00001*i)
  191. #define NOSKIP 1
  192. #if NOSKIP
  193. fftwts(cwts, n16, n16);
  194. timer("CFFTF_16  ", .030, .032,*cfftf_time, n16);
  195. fftwts(cwts, n64, n64);
  196. timer("CFFTF_64  ", .080, .067,*cfftf_time, n64);
  197. fftwts(cwts, n128, n128);
  198. timer("CFFTF_128 ", .135, .113,*cfftf_time, n128);
  199. fftwts(cwts, n256, n256);
  200. timer("CFFTF_256 ", .229, .191,*cfftf_time, n256);
  201. fftwts(cwts, n512, n512);
  202. timer("CFFTF_512 ", .39 , .32 ,*cfftf_time, n512);
  203. fftwts(cwts, n1k, n1k);
  204. timer("CFFTF_1K  ", .80 , .650,*cfftf_time, n1k);
  205. fftwts(cwts, n2k, n2k);
  206. timer("CFFTF_2K  ", 2.9 ,2.300,*cfftf_time,  n2k);
  207. fftwts(cwts, n4k, n4k);
  208. timer("CFFTF_4K  ", 5.6 ,4.500,*cfftf_time,  n4k);
  209. fftwts(cwts, n8k, n8k);
  210. timer("CFFTF_8K  ", 12. ,9.500,*cfftf_time,  n8k);
  211. timer("CFFTSC_1K ", .12 , .011,*cfftsc_time, n1k);
  212. fftwts(cwts, n64, n64);
  213. timer("RFFTF_64  ", .029,  .023,*rfftf_time, n64);
  214. fftwts(cwts, n128, n128);
  215. timer("RFFTF_128 ", .058,  .046,*rfftf_time, n128);
  216. fftwts(cwts, n256, n256);
  217. timer("RFFTF_256 ", .115,  .092,*rfftf_time, n256);
  218. fftwts(cwts, n512, n512);
  219. timer("RFFTF_512 ", .23 ,  .18,*rfftf_time, n512);
  220. fftwts(cwts, n1k, n1k);
  221. timer("RFFTF_1K  ", .49 ,  .39,*rfftf_time, n1k);
  222. fftwts(cwts, n2k, n2k);
  223. timer("RFFTF_2K  ", .95 ,  .81,*rfftf_time,  n2k);
  224. fftwts(cwts, n4k, n4k);
  225. timer("RFFTF_4K  ", 3.9 ,  3.0,*rfftf_time,  n4k);
  226. fftwts(cwts, n8k, n8k);
  227. timer("RFFTF_8K  ", 7.4 ,  5.8,*rfftf_time,  n8k);
  228. timer("RFFTSC_1K ", .064, .057,*rfftsc_time, n1k);
  229. #endif    /* NOSKIP */
  230. fftwts(cwts, 2*npts, 2*npts);
  231. #if NOSKIP
  232. timer("ACORF     ", 2.3 , 1.8 ,*acorf_time, npts);
  233. INIT_INPUTS (.00001*i)
  234. if (npts <= 2048)
  235.     timer("ACORT     ", 27. ,22.0 ,*acort_time, npts);
  236. else
  237.     timer("ACORT 2K  ", 27. ,22.0 ,*acort_time, n2k);
  238. timer("ASPEC     ", .12 , .10 ,*aspec_time, npts);
  239. /* fftwts(cwts, npts, npts); */
  240. timer("BLKMAN    ", 1.7 , 1.3 ,*blkman_time, npts);
  241. timer("CCDOTP    ", .18 , 0.14,*ccdotp_time, npts);
  242. /* removed due to excesive delay 12/10/98 RDK
  243. timer("CCORF     ", 3.4 , 2.7, *ccorf_time, npts);
  244. */
  245. INIT_INPUTS (.00001*i)
  246. if (npts <= 2048)
  247.     timer("CCOR